この HIPエコシステム は、AMDとNVIDIAアーキテクチャ間でのソースコード互換性を実現するための軽量な抽象レイヤーとして設計されています。これは ROCm(Radeon Open Compute) スタックを使用し、特に 異種システムアーキテクチャ(HSA) ランタイムと カーネル統合ドライバ(KFD)を活用しています。
1. 初期化ブートストラップ
初期化は、 hsa_init(0, ...) および hsaKmtOpenKFD(...)を通じて低レベルのカーネルドライバとのハンドシェイクから始まります。これらの確立呼び出しにより、ユーザースペースアプリケーションとAMD GPUハードウェアの間の通信ブリッジが構築されます。
2. テポロジーとプロパティの検出
カーネルの起動前に、ランタイムは hsaKmtAcquireSystemProperties および hsaKmtGetNodePropertiesを使用してハードウェア機能を特定します。また、物理メモリをGPUノードにマッピングするために hsaKmtMapMemoryToGPUNodesを使用し、デバイスに対するページテーブルの可視性を確保します。
3. コンパイルパイプライン
CUDAとHIPの橋渡しは、以下の2つの柱によって構成されています: hipify-perl (正規表現ベースのトランスパイラー)および hipcc (コンパイララッパー)。
# ポーティングワークフローの例
hipify-perl square.cu > square.cpp
hipcc square.cpp -o square.out
hipify-perl square.cu > square.cpp
hipcc square.cpp -o square.out
4. バージョン管理ロジック
互換性は、正確な式を用いて保証され、 hipRuntimeGetVersion がHSA拡張テーブルと一致することを確認します:
$$\text{HIP\_VERSION} = \text{MAJOR} \times 10^7 + \text{MINOR} \times 10^5 + \text{PATCH}$$
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>